A cloud computing system (also referred to as a “cloud”) has data centers with servers and storage devices that host the applications and data of tenants of the cloud. A tenant is an organization whose applications and data are hosted by the cloud. A cloud provides many services that can be used by the applications of the tenants. For example, a cloud may provide identity provider services, file storage services, database services, security services (e.g., anti-virus software and firewalls), load balancing services, and so on. The tenants subscribe to the services that are needed to support their applications.
The tenants of a cloud tend to store vast amounts of data in the cloud. The data can include audio and video data that is streamed to users, transactions of a tenant's customers that are stored in real time (such as electronic commerce transactions), the inventory of electronic commerce systems, the electronic mails of electronic mail systems, images of image file sharing web sites, web pages of web sites, and so on.
A file storage service of a cloud manages the storage of the data for those tenants that subscribe to the file storage service. The file storage service may provide many sophisticated services to the applications. For example, the file storage service may provide an automated backup service so that if data stored on one storage device becomes unavailable (e.g., because it is corrupted or the storage device fails), a backup copy is available. Another service that may be provided is a remote duplication service that stores duplicates of data at multiple data centers so that if one data center fails (e.g., because of a natural disaster), a failover procedure will allow access requests (e.g., read requests and write requests) to be routed to a data center that has not failed.
A file storage service needs to securely store the data of each tenant (e.g., data can be accessed only by authorized users and applications) and to service access requests in a timely manner. To help with security, the file storage service may generate one or more partitions for each tenant (or application of a tenant) that serves as an index to the data of the tenant that is stored on file storage devices. When the file storage service receives an access request for a tenant, it directs the access request to a file server that is assigned the partition that indexes the data that is the target of the access request. The file storage service accesses the partition to identify the file storage devices that need to be accessed to service the access request. To help with the servicing of access requests in a timely manner, the file storage service may perform load balancing of the partitions. For example, if a large number of access requests are directed to one file server, the file storage service may assign a partition currently assigned to that file service to a different file server. The decision to reassign partitions is based primarily on various performance factors that indicate performance has been degraded. The performance factors may include whether a file server starts throttling access requests by responding to access requests indicating that the file server is too busy, whether the file server sends timeout responses indicating that the file server cannot handle the request in a timely manner, and so on. Although these performance factors provide some basis for reassigning partitions, the reassignments can occur only well after a performance problem is detected. It would be desirable to perform load balancing of the partitions before performance problems are encountered.